package com.xixi.rpc.springboot.starter.bootstrap;

import com.xixi.core.rpc.RpcApplication;
import com.xixi.core.rpc.config.RpcConfig;
import com.xixi.core.rpc.server.tcp.VertxTcpServer;
import com.xixi.rpc.springboot.starter.annotation.EnableRpc;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.support.BeanDefinitionRegistry;
import org.springframework.context.annotation.ImportBeanDefinitionRegistrar;
import org.springframework.core.type.AnnotationMetadata;

/**
 * @author: zxh
 * @date: 2024/8/28 14:36
 * @description: Rpc框架启动
 */
@Slf4j
public class RpcInitBootstrap implements ImportBeanDefinitionRegistrar {

	/**
	 * Spring 初始化时执行，初始化Rpc框架
	 * @param importingClassMetadata
	 * @param registry
	 */
	@Override
	public void registerBeanDefinitions(AnnotationMetadata importingClassMetadata, BeanDefinitionRegistry registry) {
		// 获取 EnableRpc 注解的属性值
		boolean needServer = (boolean) importingClassMetadata.getAnnotationAttributes(EnableRpc.class.getName()).get("needServer");

		// Rpc框架初始化（配置和注册中心）
		RpcApplication.init();

		// 全局配置
		final RpcConfig rpcConfig = RpcApplication.getRpcConfig();

		// 启动服务器
		if (needServer) {
			VertxTcpServer vertxTcpServer = new VertxTcpServer();
			vertxTcpServer.doStart(rpcConfig.getServerPort());
		} else {
			log.info("不启动server");
		}
	}
}
